#ifndef ANGLEMATCHER_H_
#define ANGLEMATCHER_H_

#ifndef NULL
#define NULL 0
#endif

#include "map/RoadSegment.h"

#include "util/Matcher.h"
#include "util/MathUtils.h"
#include <string>

using namespace std;
/*
 * Matcher que utiliza el metodo getId() para comparar un elemento con un id.
 */
class AngleMatcher: public Matcher<RoadSegment> {
public:

	/* Constructor. Recibe el rango que se va a usar de overlapping */
	AngleMatcher(Intersection* intersection, double targetAngle, double deltaAngle) {
		this->intersection = intersection;
		this->phaseAngle = targetAngle - PI;
		this->minAngle = targetAngle - deltaAngle;
		this->maxAngle = targetAngle + deltaAngle;
		this->deltaAngle = deltaAngle;
	}

	/* Destructor. */
	virtual ~AngleMatcher() { }

	/*
	 * Metodo para comparar. Devuelve true en caso que el id del elemento
	 * a comparar sea igual al id seteado anteriormente.
	 */
	virtual bool matches(RoadSegment* dataToCompare) {
		double angle = util::correctAnglePhase(intersection->angleFor(dataToCompare), phaseAngle);
		return (angle < maxAngle && angle > minAngle);
	}

private:
	Intersection* intersection;
	double minAngle;
	double maxAngle;
	double phaseAngle;
	double deltaAngle;
};

#endif /* ANGLEMATCHER_H_*/
